C++ memo

basic

後者は、 LoopTools などを使うときに必要。

LoopTools in C++

まず環境変数を設定。 コンパイルは以下のおまじない。 後者は、 Eigen を使うときは必要。g++ でないとコンパイルできないため。

include

    #define _USE_MATH_DEFINES // M_PI (円周率)のため。includeの前に書く。

    #include <iostream>  // たぶん絶対必要
    #include <Eigen/Dense> // Eigen を使うのに必要
    #include <math.h> // sin cos とか
    #include <complex> // 複素数
    #include <fstream> //ファイル入出力

    using Eigen::MatrixXd; // Default であった。

    // 以下のは書いておくと、プログラムが書きやすくなる。
    using namespace std;  
    using namespace Eigen;

Eigen

行列計算のライブラリ。ダウンロードして解凍すると、ディレクトリがある。この中の Eigen/ というディレクトリを、/usr/local/include にコピーする。その後、プログラムをhoge.cppファイルを書いたとしたら、 最初に試すべきファイルは ここにある。
どうやら gcc では動かないので注意。また、Eigen/ を置くところは、 g++ -v hoge.cpp として、 #include <...> の探索はここから始まります: と表示された所以下にあるディレクトリならどこでもよいと思う。

We need

いろいろコマンド

行列に値を入れる。 (注1)必ずしも小さい順には入らない。固有値が大きいと指数を使う場合があるが、指数を使って表した数と使わずに表した数との大小関係は考慮されない。例えば、固有値が小さい順に 3.2e-10, 80.1234, 3.0e+7 と3つあった場合、80.1234, 3.2e-10, 3.0e+7 のように、指数を使わない数がまず先にきてしまう。

複素数、実部、虚部

// What we need to use complex numbers
#include <complex>

//yp を複素数と宣言
std::complex<double> yp;

//yp に値を代入
yp = (a, b);

//yp に極座標で
// yp = std::polar(r, theta);
yp = polar(r, theta);

// 実部、虚部、位相。
hoge.real();
hoge.imag();
arg(hoge);

ファイル書き込み

ofstream ofs( "hoge.dat" );
ofs << "a= " << a << endl;